/*
 * Copyright (C) 2001 MontaVista Software Inc.
 * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 */

#include <asm/regdef.h>
#include <asm/cp0regdef.h>
#include <asm/asm.h>
.section .text.exc_vec3
/*** exercise 3.11 ***/
NESTED(except_vec3, 0, sp)
	.set noat
	.set noreorder
1:
	mfc0 k1, CP0_CAUSE
	la k0, exception_handlers
	andi k1, 0x7c
	addu k0, k1
	lw k0, (k0)
	nop
	jr k0
	nop
END(except_vec3)
	.set at


.data
            .globl mCONTEXT
mCONTEXT:
            .word 0

            .globl delay
delay:
            .word 0

            .globl tlbra
tlbra:
            .word 0

            .section .data.stk
KERNEL_STACK:
            .space 0x8000


            .text
LEAF(_start)
    
    .set    mips2
    .set    reorder

    /* Disable interrupts */
    mtc0    zero, CP0_STATUS

    /* Disable watch exception. */
    mtc0    zero, CP0_WATCHLO
    mtc0    zero, CP0_WATCHHI

    /* disable kernel mode cache */
    mfc0    t0, CP0_CONFIG
    and    t0, ~0x7
    ori    t0, 0x2
    mtc0    t0, CP0_CONFIG

    /* set up stack */
    li    sp, 0x80400000

    li    t0,0x80400000
    sw    t0,mCONTEXT
    
    /* jump to main */
    jal    main
            
loop:
    j    loop
    nop
END(_start)

